![]() |
![]() |
|
rtk 20092009.1.1Kolikokrat najmanjši 1. podnalogaNalogaNapiši funkcijo Vhodni podatkitekstovna datoteka
Izhodni podatkiŠtevilo pojavitev najmanjšega števila v zaporedju. Uradna rešitevdef kolikokrat_najmanjsi(datoteka): '''Prebere datoteko in vrne število pojavitev najmenjšega števila v zaporedju''' dat = open(datoteka, 'r', encoding='utf-8').readlines() zaporedje = [] for vrstica in dat[1:]: zaporedje.append(int(vrstica.strip('\n'))) najmanjsi = min(zaporedje) return sum(1 for clen in zaporedje if clen == najmanjsi) 2009.1.2Označevanje kovancev 1. podnalogaIzdelovalec spominskih kovancev bi rad izdelal serijo dvajsetih milijonov kovancev,
vsak pa naj bi imel enolično oznako, sestavljeno iz števk in nekaterih velikih črk.
Oznaka naj bi bila dovolj kratka, da si jo je lažje zapomniti ali prepisati, hkrati
pa bi bilo pametno, da ne uporabimo v oznaki črk, ki so preveč podobne števkam
ali drugim črkam, zato da se izognemo najbolj pogostim zmotam pri odčitavanju
oznake. Tako izločimo črke I, L, O, Q, S, U, uporabimo pa vse ostale črke angleške
abecede in vse števke od
Izkaže se, da oznaka, sestavljena iz NalogaNapiši funkcijo Vhodni podatkiniz z znaki
Izhodni podatkiTabela
Uradna rešitevfrom itertools import combinations_with_replacement znaki = '0123456789ABCDEFGHJKMNPRTVWXYZ' def oznaciKovance(znaki): return list(combinations_with_replacement(znaki,5))[:20000000] 2009.1.3Citiranje 1. podnalogaRecimo, da bi radi citirali razne strani iz neke knjige; to naredimo tako, da naštejemo
številke teh strani v strogo naraščajočem vrstnem redu, na primer NalogaNapiši funkcijo Vhodni podatkiSeznam integerjev s številkami strani
V seznamu so številke strani že podane v naraščajočem vrstnem redu, vse pa so cela
števila, večja od Izhodni podatkiSeznam nizov s strnjenimi zaporednimi stranmi.
Uradna rešitevdef citiraj(sez_strani): '''V seznamu skrči zaporedne številke strani npr. 1,2,3,4 v 1-4 in vrne nov seznam''' skrcen_seznam = [] sez_strani.append(0) # dodamo, da ne bo problemov z indeksi i = 0 while i < len(sez_strani) - 1: # preverimo naslednjo if sez_strani[i] == sez_strani[i + 1] - 1: Od = sez_strani[i] Do = sez_strani[i + 1] # preverimo, do kam gre zaporedje for j in range(i, len(sez_strani) - 1): if sez_strani[j + 1] == sez_strani[j + 2] - 1: Do = sez_strani[j + 2] else: break skrcen_seznam.append(str(Od) + '-' + str(Do)) i += Do - Od + 1 else: skrcen_seznam.append(str(sez_strani[i])) i += 1 return skrcen_seznam 2009.1.41. podnalogaPo tisočletjih življenja v komuni se nekega dne tudi v deželo Smrkcev prikrade kapitalizem. V času tranzicije so si postopno razgrabili svojo vasico tako, da si je osem tajkunosmrkcev eden za drugim prilastilo po polovico še nerazdeljenega ozemlja. Vsak je lahko izbiral med severno, južno, zahodno in vzhodno polovico preostanka. Napiši podprogram Nerazdeljeno, ki ugotovi, katero območje je ostalo nerazdeljeno. Celotna vas Smrkcev se razprostira na kvadratni površini velikosti 256 × 256 metrov, koordinate vasi pa se merijo od severozahodnega oglišča (0, 0) do skrajnega jugovzhoda (256, 256). Koordinate poljubnega pravokotnega območja znotraj vasi lahko zapišemo kot zaporedje štirih vrednosti (najprej x in y koordinata SZ oglišča in nato x in y koordinata JV oglišča); celotna vas ima torej koordinate (0, 0, 256, 256). NalogaNapiši funkcijo Vhodni podatkiParameter Izhodni podatkiTvoj podprogram naj vrne seznam s koordinati območja [z, s, v, j], ki ostane nerazdeljeno po vseh
delitvah iz niza PrimerRecimo, da dobimo niz
Prvi tajkunosmrkec si je tako vzel severno (zgornjo) polovico celotnega ozemlja, torej ostane južna (spodnja) polovica:
Drugi izbere severno polovico preostanka, ostane
Tretji izbere zahodno (levo) polovico, ostane
Nato vzame četrti južno polovico, ostane
Ostali štirje vzamejo vzhodno, vzhodno, južno in severno:
Zadnji izpis je torej naš končni odgovor KomentarNa tekmovanju so zahtevali izpis na standarni izhod. Dodaten del naloge na tekmovanju je opis sprememb v kodi ob spremembi velikosti ozemlja in števila tajkunsmrkcev. Uradna rešitevdef nerazdeljeno(delitve): '''poračuna, katero območje v smkcolandiji(velikosti 256x256) je ostalo nerazdeljeno po izboru osmih tajkun smrkcov''' s,j,z,v = 0, 256, 0, 256 for izborSmrkca in delitve: if izborSmrkca == 'S': s = (s + j) / 2 elif izborSmrkca =='J': j = (s + j) / 2 elif izborSmrkca == 'Z': z = (z + v) / 2 elif izborSmrkca == 'V': v = (z + v) / 2 return [z,s,v,j] 2009.2.1Soglasniški podnizi 1. podnalogaNa datoteki imamo zapisane besede, vsako v svoji vrstici. V njih nastopajo le male črke angleške abecede, nobene številke ali ločila ni. Nobena beseda ni daljša od 100 znakov. Zanima nas beseda, v kateri se nahaja najdaljši strnjeni podniz soglasnikov. Za soglasnike štejemo vse črke, ki niso samoglasniki (a, e, i, o, u). Tule je nekaj primerov besed, poleg vsake besede smo zapisali iskano dolžino:
NalogaNapiši funkcijo Vhodni podatkiDatoteka z besedami, ki ima največ Izhodni podatkiNiz z besedo, ki ima najdaljše zaporedje soglasnikov. Komentarna tekmovanju je bilo zahtevano branje in pisanje s standardnim vhodom. Uradna rešitevdef naj_soglasniki(datoteka): '''Poišče besedo, ki vsebuje najdaljše zaporedje soglasnikov in jo izpiše''' dat1 = open(datoteka, 'r', encoding='utf-8').readlines() dat = [] for vrstica in dat1: dat.append(vrstica.strip('\n')) stevec_soglasnikov = 0 naj = 0 for beseda in dat: for crka in beseda: if crka not in 'aeiou ': stevec_soglasnikov += 1 if crka in 'aeiou ': if naj < stevec_soglasnikov: naj = stevec_soglasnikov naj_beseda = beseda stevec_soglasnikov = 0 return naj_beseda.strip(' ')Mesto objave ob koncu projekta 15.9.2018 |